home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
hity wydania
/
Ubuntu 9.10 PL
/
karmelkowy-koliberek-desktop-9.10-i386-PL.iso
/
casper
/
filesystem.squashfs
/
usr
/
bin
/
foomatic-ppd-options
< prev
next >
Wrap
Text File
|
2009-09-18
|
4KB
|
147 lines
#!/usr/bin/perl -w
use strict;
# This is foomatic-ppd-options, a program which will print out the
# options specified by a PPD file.
#
# foomatic-ppd-options [file*]
# reads one or more PPD files from the specified file or
# standard input. If present, PPD information is separated by
# lines starting with Printer: . This makes it compatible with
# the LPRng 'lpc ppd' command:
# lpc ppd | foomatic-ppd-options
use Foomatic::Defaults;
use Foomatic::DB;
use Data::Dumper;
use FileHandle;
$0 =~ m!/([^/]+)\s*$!;
my $progname = ($1 || $0);
sub help {
print STDERR <<EOF;
$progname [-d=debuglevel][files]
reads one or more PPD files from the specified file or
standard input. If present, PPD information is separated by
lines starting with Printer: . This makes it compatible with
the LPRng 'lpc ppd' command:
lpc ppd | foomatic-ppd-options
-h - printes help message
-d debuglevel - sets debugging level (0 is 0ff)
EOF
exit 1;
}
# Read out the program name with which we were called, but discard the path
my $debug = 0;
# We use the library Getopt::Long here, so that we can have more than
# one "-o" option on one command line.
my( $opt_h, $opt_d );
use Getopt::Long;
Getopt::Long::Configure("no_ignore_case");
GetOptions(
"d=i" => \$opt_d, # Help!
"h" => \$opt_h, # Help!
"help"=> \$opt_h) || help();
help() if $opt_h;
$debug = $opt_d if $opt_d;
sub getppdinfo( $ $ );
if( @ARGV ){
while( @ARGV ){
my $file = shift @ARGV;
print STDERR "file $file\n" if $debug;
my $fd = new FileHandle "<$file";
if( not $fd ){
die( "$progname: cannot open '$file' - $!\n" );
next;
}
getppdinfo($fd, $file);
close($fd);
}
} else {
getppdinfo( \*STDIN, "STDIN" );
}
exit 0;
my $key;
sub order_by_key{$a->{$key} cmp $b->{$key}};
sub getppdinfo( $ $ ){
my( $fd, $name ) = @_;
my @ppd = <$fd>;
close( $fd );
print "PPD $name= " . Dumper(\@ppd) if $debug > 1;
my ($printer);
$printer = shift @ppd if $ppd[0] =~ /^Printer:/;
print "$printer\n" if $printer;
my $ppd = ppdfromvartoperl( \@ppd );
if( not defined $ppd ){
die "$progname: bad ppdfile $name\n";
}
print STDERR "PPD DB " . Dumper( $ppd ) if $debug;
my $makemodel = ($ppd->{'makemodel'} or "");
print "makemodel = $makemodel\n";
my $args = $ppd->{'args'};
print STDERR "PPD ARGS " . Dumper( $args ) if $debug;
for my $argname ( @{$args} ) {
my $name = $argname->{'name'};
my $language = "postscript";
if( $name =~ /^JCL(.*)$/ ){
$argname->{'name'} = $1;
$language = "pjl";
}
$argname->{'language'} = $language;
}
$key = 'name';
for my $argname ( sort order_by_key @{$args} ) {
my $name = $argname->{'name'};
my $comment = ($argname->{'comment'} or "");
my $type = ($argname->{'type'} or "");
my $vals = ($argname->{'vals'} or []);
my $default = ($argname->{'default'} or "");
my $language = ($argname->{'language'} or "postscript");
print STDERR "PPD ARG " . $name . "\n" if $debug;
print STDERR "PPD VALUES " . Dumper( $vals ) . "\n" if $debug;
my $values = "name=$name";
$values .= "($comment)" if( $comment );
$values .= ";";
$values .= " language=$language;";
$values .= " type=$type;" if( $type );
$values .= " default=$default;" if( $default );
$values .= " options=";
if( not @{$vals} ){
if( $type eq "bool" ){
$values .= "True (True), False (False)";
}
} else {
$key = 'value';
for my $v ( sort order_by_key @{$vals} ){
my $value = $v->{'value'};
my $comment = ($v->{'comment'} or "");
my $driverval = ($v->{'driverval'} or "");
$driverval =~ s/[\s\n]+/ /gm;
$driverval =~ s/^ //gm;
$driverval =~ s/ $//gm;
$driverval =~ s/[\W]/\\$&/gm;
$driverval =~ s/\\ / /gm;
$comment =~ s/[\W]/\\$&/g;
$comment =~ s/\\ / /gm;
$values .= "$value";
$values .= " ($comment)" if( $comment );
$values .= " [$driverval]" if( $driverval );
$values .= ", ";
}
$values =~ s/, $/;/;
}
print $values . "\n";
}
}